//import java.util.Date;
//import java.text.SimpleDateFormat;
//import java.text.ParseException;
//import java.util.Calendar;
//
//public class _Date{
//    public static void main(String[] args){
//        System.out.println("Date");
//    }
//
//
//    /**
//     * 日期 Date
//     */
//    void date(){
//        // Date类
//        // 注意：是java.util.Date;
//        // 而非 java.sql.Date，此类是给数据库访问的时候使用的
//
//        /**
//         * 时间原点概念
//         */
//        // 所有的数据类型，无论是整数，布尔，浮点数还是字符串，最后都需要以数字的形式表现出来。
//        // 日期类型也不例外，换句话说，一个日期，比如2020年10月1日，在计算机里，会用一个数字来代替。
//        // 那么最特殊的一个数字，就是零. 零这个数字，就代表Java中的时间原点，其对应的日期是1970年1月1日 8点0分0秒 。 (为什么是8点，因为中国的太平洋时区是UTC-8，刚好和格林威治时间差8个小时)
//        // 为什么对应1970年呢？ 因为1969年发布了第一个 UNIX 版本：AT&T，综合考虑，当时就把1970年当做了时间原点。
//        // 所有的日期，都是以为这个0点为基准，每过一毫秒，就+1。
//
//
//        /**
//         * 创建日期对象
//         */
//        public class TestDate {
//            public static void main(String[] args) {
//                // 当前时间
//                Date d1 = new Date();
//                System.out.println("当前时间:");
//                System.out.println(d1);
//                System.out.println();
//                // 从1970年1月1日 早上8点0分0秒 开始经历的毫秒数
//                Date d2 = new Date(5000);
//                System.out.println("从1970年1月1日 早上8点0分0秒 开始经历了5秒的时间");
//                System.out.println(d2);
//            }
//        }
//
//
//        /**
//         * getTime
//         */
//        // getTime() 得到一个long型的整数
//        // 这个整数代表 从1970.1.1 08:00:00:000 开始 每经历一毫秒，增加1
//        // 直接打印对象，会看到 “Tue Jan 05 09:51:48 CST 2016” 这样的格式
//        public class TestDate {
//            public static void main(String[] args) {
//                Date now= new Date();
//                //打印当前时间
//                System.out.println("当前时间:"+now.toString());
//                //getTime() 得到一个long型的整数
//                //这个整数代表 1970.1.1 08:00:00:000，每经历一毫秒，增加1
//                System.out.println("当前时间getTime()返回的值是："+now.getTime());
//                Date zero = new Date(0);
//                System.out.println("用0作为构造方法，得到的日期是:"+zero);
//            }
//        }
//
//
//        /**
//         * System.currentTimeMillis()
//         */
//        // 当前日期的毫秒数
//        // new Date().getTime() 和 System.currentTimeMillis() 是一样的
//        // 不过由于机器性能的原因，可能会相差几十毫秒，毕竟每执行一行代码，都是需要时间的
//        public class TestDate {
//            public static void main(String[] args) {
//                Date now= new Date();
//                //当前日期的毫秒数
//                System.out.println("Date.getTime() \t\t\t返回值: "+now.getTime());
//                //通过System.currentTimeMillis()获取当前日期的毫秒数
//                System.out.println("System.currentTimeMillis() \t返回值: "+System.currentTimeMillis());
//            }
//        }
//    }
//
//
//    /**
//     * 日期 格式化
//     */
//    void SimpleDateFormat(){
//        /**
//         * 日期转字符串
//         */
//        public class TestDate {
//            public static void main(String[] args) {
//                // y 代表年
//                // M 代表月
//                // d 代表日
//                // H 代表24进制的小时
//                // h 代表12进制的小时
//                // m 代表分钟
//                // s 代表秒
//                // S 代表毫秒
//                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
//                Date d = new Date();
//                String str = sdf.format(d);
//                System.out.println("当前时间通过 yyyy-MM-dd HH:mm:ss SSS 格式化后的输出: "+str);
//
//                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd" );
//                Date d1 = new Date();
//                String str1 = sdf1.format(d1);
//                System.out.println("当前时间通过 yyyy-MM-dd 格式化后的输出: "+str1);
//            }
//        }
//
//
//        /**
//         * 字符串转日期
//         */
//        // 模式（yyyy/MM/dd HH:mm:ss）需要和字符串格式保持一致，如果不一样就会抛出解析异常 ParseException
//        public class TestDate {
//            public static void main(String[] args) {
//                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
//                String str = "2016/1/5 12:12:12";
//                try {
//                    Date d = sdf.parse(str);
//                    System.out.printf("字符串 %s 通过格式  yyyy/MM/dd HH:mm:ss %n转换为日期对象: %s",str,d.toString());
//                } catch (ParseException e) {
//                    // TODO Auto-generated catch block
//                    e.printStackTrace();
//                }
//            }
//        }
//    }
//
//
//    /**
//     * 日期 Calendar
//     */
//    void Calendar(){
//        // Calendar类，即日历类，常用于进行“翻日历”，比如下个月的今天是多久
//
//        /**
//         *  Calendar 与 Date进行转换
//         */
//        public class TestDate {
//            public static void main(String[] args) {
//                //采用单例模式获取日历对象 Calendar.getInstance();
//                Calendar c = Calendar.getInstance();
//
//                //通过日历对象得到日期对象
//                Date d = c.getTime();
//
//                Date d2 = new Date(0);
//                c.setTime(d2); //把这个日历，调成日期 : 1970.1.1 08:00:00
//            }
//        }
//
//
//        /**
//         * 翻日历
//         */
//        // add方法，在原日期上增加年/月/日
//        // set方法，直接设置年/月/日
//        public class TestDate {
//            private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//            public static void main(String[] args) {
//                Calendar c = Calendar.getInstance();
//                Date now = c.getTime();
//                // 当前日期
//                System.out.println("当前日期：\t" + format(c.getTime()));
//
//                // 下个月的今天
//                c.setTime(now);
//                c.add(Calendar.MONTH, 1);
//                System.out.println("下个月的今天:\t" +format(c.getTime()));
//
//                // 去年的今天
//                c.setTime(now);
//                c.add(Calendar.YEAR, -1);
//                System.out.println("去年的今天:\t" +format(c.getTime()));
//
//                // 上个月的第三天
//                c.setTime(now);
//                c.add(Calendar.MONTH, -1);
//                c.set(Calendar.DATE, 3);
//                System.out.println("上个月的第三天:\t" +format(c.getTime()));
//            }
//
//            private static String format(Date time) {
//                return sdf.format(time);
//            }
//        }
//    }
//}